<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>5.2. Theory of Operation</title>
<link rel="stylesheet" href="dbstyle.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.72.0">
<link rel="start" href="index.html" title="Programmer's Reference Guide">
<link rel="up" href="zend.config.html" title="Chapter 5. Zend_Config">
<link rel="prev" href="zend.config.html" title="Chapter 5. Zend_Config">
<link rel="next" href="zend.config.adapters.ini.html" title="5.3. Zend_Config_Ini">
<link rel="chapter" href="introduction.html" title="Chapter 1. Introduction to Zend Framework">
<link rel="chapter" href="zend.acl.html" title="Chapter 2. Zend_Acl">
<link rel="chapter" href="zend.auth.html" title="Chapter 3. Zend_Auth">
<link rel="chapter" href="zend.cache.html" title="Chapter 4. Zend_Cache">
<link rel="chapter" href="zend.config.html" title="Chapter 5. Zend_Config">
<link rel="chapter" href="zend.console.getopt.html" title="Chapter 6. Zend_Console_Getopt">
<link rel="chapter" href="zend.controller.html" title="Chapter 7. Zend_Controller">
<link rel="chapter" href="zend.currency.html" title="Chapter 8. Zend_Currency">
<link rel="chapter" href="zend.date.html" title="Chapter 9. Zend_Date">
<link rel="chapter" href="zend.db.html" title="Chapter 10. Zend_Db">
<link rel="chapter" href="zend.debug.html" title="Chapter 11. Zend_Debug">
<link rel="chapter" href="zend.dojo.html" title="Chapter 12. Zend_Dojo">
<link rel="chapter" href="zend.dom.html" title="Chapter 13. Zend_Dom">
<link rel="chapter" href="zend.exception.html" title="Chapter 14. Zend_Exception">
<link rel="chapter" href="zend.feed.html" title="Chapter 15. Zend_Feed">
<link rel="chapter" href="zend.filter.html" title="Chapter 16. Zend_Filter">
<link rel="chapter" href="zend.form.html" title="Chapter 17. Zend_Form">
<link rel="chapter" href="zend.gdata.html" title="Chapter 18. Zend_Gdata">
<link rel="chapter" href="zend.http.html" title="Chapter 19. Zend_Http">
<link rel="chapter" href="zend.infocard.html" title="Chapter 20. Zend_InfoCard">
<link rel="chapter" href="zend.json.html" title="Chapter 21. Zend_Json">
<link rel="chapter" href="zend.layout.html" title="Chapter 22. Zend_Layout">
<link rel="chapter" href="zend.ldap.html" title="Chapter 23. Zend_Ldap">
<link rel="chapter" href="zend.loader.html" title="Chapter 24. Zend_Loader">
<link rel="chapter" href="zend.locale.html" title="Chapter 25. Zend_Locale">
<link rel="chapter" href="zend.log.html" title="Chapter 26. Zend_Log">
<link rel="chapter" href="zend.mail.html" title="Chapter 27. Zend_Mail">
<link rel="chapter" href="zend.measure.html" title="Chapter 28. Zend_Measure">
<link rel="chapter" href="zend.memory.html" title="Chapter 29. Zend_Memory">
<link rel="chapter" href="zend.mime.html" title="Chapter 30. Zend_Mime">
<link rel="chapter" href="zend.openid.html" title="Chapter 31. Zend_OpenId">
<link rel="chapter" href="zend.paginator.html" title="Chapter 32. Zend_Paginator">
<link rel="chapter" href="zend.pdf.html" title="Chapter 33. Zend_Pdf">
<link rel="chapter" href="zend.registry.html" title="Chapter 34. Zend_Registry">
<link rel="chapter" href="zend.rest.html" title="Chapter 35. Zend_Rest">
<link rel="chapter" href="zend.search.lucene.html" title="Chapter 36. Zend_Search_Lucene">
<link rel="chapter" href="zend.server.html" title="Chapter 37. Zend_Server">
<link rel="chapter" href="zend.service.html" title="Chapter 38. Zend_Service">
<link rel="chapter" href="zend.session.html" title="Chapter 39. Zend_Session">
<link rel="chapter" href="zend.soap.html" title="Chapter 40. Zend_Soap">
<link rel="chapter" href="zend.test.html" title="Chapter 41. Zend_Test">
<link rel="chapter" href="zend.text.html" title="Chapter 42. Zend_Text">
<link rel="chapter" href="zend.timesync.html" title="Chapter 43. Zend_TimeSync">
<link rel="chapter" href="zend.translate.html" title="Chapter 44. Zend_Translate">
<link rel="chapter" href="zend.uri.html" title="Chapter 45. Zend_Uri">
<link rel="chapter" href="zend.validate.html" title="Chapter 46. Zend_Validate">
<link rel="chapter" href="zend.version.html" title="Chapter 47. Zend_Version">
<link rel="chapter" href="zend.view.html" title="Chapter 48. Zend_View">
<link rel="chapter" href="zend.xmlrpc.html" title="Chapter 49. Zend_XmlRpc">
<link rel="appendix" href="requirements.html" title="Appendix A. Zend Framework Requirements">
<link rel="appendix" href="coding-standard.html" title="Appendix B. Zend Framework Coding Standard for PHP">
<link rel="appendix" href="copyrights.html" title="Appendix C. Copyright Information">
<link rel="index" href="the.index.html" title="Index">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<div class="navheader"><table width="100%" summary="Navigation header">
<tr><th colspan="3" align="center">5.2. Theory of Operation</th></tr>
<tr>
<td width="20%" align="left">
<a accesskey="p" href="zend.config.html">Prev</a> </td>
<th width="60%" align="center">Chapter 5. Zend_Config</th>
<td width="20%" align="right"> <a accesskey="n" href="zend.config.adapters.ini.html">Next</a>
</td>
</tr>
</table></div>
<div class="sect1" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="zend.config.theory_of_operation"></a>5.2. Theory of Operation</h2></div></div></div>
<p>
        Configuration data are made accessible to the <code class="code">Zend_Config</code> constructor
        through an associative array, which may be multidimensional, in order to support
        organizing the data from general to specific. Concrete adapter classes function
        to adapt configuration data from storage to produce the associative array for the
        <code class="code">Zend_Config</code> constructor. User scripts may provide such arrays directly
        to the <code class="code">Zend_Config</code> constructor, without using an adapter class, since
        it may be appropriate to do so in certain situations.
    </p>
<p>
        Each configuration data array value becomes a property of the <code class="code">Zend_Config</code> object. The key is used
        as the property name. If a value is itself an array, then the resulting object property is created as a new
        <code class="code">Zend_Config</code> object, loaded with the array data. This occurs recursively, such that a hierarchy of
        configuration data may be created with any number of levels.
    </p>
<p>
        <code class="code">Zend_Config</code> implements the <code class="code">Countable</code> and <code class="code">Iterator</code>
        interfaces in order to facilitate simple access to configuration data.
        Thus, one may use the <a href="http://php.net/count" target="_top"><code class="code">count()</code></a>
        function and PHP constructs such as
        <a href="http://php.net/foreach" target="_top"><code class="code">foreach</code></a> upon
        <code class="code">Zend_Config</code> objects.
    </p>
<p>
        By default, configuration data made available through <code class="code">Zend_Config</code>
        are read-only, and an assignment (e.g.,
        <code class="code">$config-&gt;database-&gt;host = 'example.com'</code>)
        results in a thrown exception. This default behavior may be overridden through the constructor,
        however, to allow modification of data values. Also, when modifications are allowed, <code class="code">Zend_Config</code>
        supports unsetting of values (i.e. <code class="code">unset($config-&gt;database-&gt;host);</code>).
        </p>
<div class="note"><table border="0" summary="Note">
<tr>
<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/note.png"></td>
<th align="left">Note</th>
</tr>
<tr><td align="left" valign="top"><p>
                It is important not to confuse such in-memory modifications with saving configuration
                data out to specific storage media. Tools for creating and modifying configuration
                data for various storage media are out of scope with respect to <code class="code">Zend_Config</code>.
                Third-party open source solutions are readily available for the purpose of creating and
                modifying configuration data for various storage media.
            </p></td></tr>
</table></div>
<p>
    </p>
<p>
        Adapter classes inherit from the <code class="code">Zend_Config</code> class since they utilize its functionality.
    </p>
<p>
        The <code class="code">Zend_Config</code> family of classes enables configuration data to be
        organized into sections. <code class="code">Zend_Config</code> adapter objects may be loaded
        with a single specified section, multiple specified sections, or all sections
        (if none are specified).
    </p>
<p>
        <code class="code">Zend_Config</code> adapter classes support a single inheritance model that
        enables configuration data to be inherited from one section of configuration data
        into another. This is provided in order to reduce or eliminate the need for
        duplicating configuration data for different purposes. An inheriting section
        may also override the values that it inherits through its parent section.
        Like PHP class inheritance, a section may inherit from a parent section,
        which may inherit from a grandparent section, and so on, but multiple inheritance
        (i.e., section C inheriting directly from parent sections A and B) is not supported.
    </p>
<p>
        If you have two <code class="code">Zend_Config</code> objects, you can merge them into a single
        object using the <code class="code">merge()</code> function. For example, given <code class="code">$config</code> and
        <code class="code">$localConfig</code>, you can merge data from <code class="code">$localConfig</code> to <code class="code">$config</code> using
        <code class="code">$config-&gt;merge($localConfig);</code>. The items in <code class="code">$localConfig</code> will override
        any items with the same name in <code class="code">$config</code>.
    </p>
</div>
<div class="navfooter"><table width="100%" summary="Navigation footer">
<tr>
<td width="40%" align="left">
<a accesskey="p" href="zend.config.html">Prev</a> </td>
<td width="20%" align="center"><a accesskey="u" href="zend.config.html">Up</a></td>
<td width="40%" align="right"> <a accesskey="n" href="zend.config.adapters.ini.html">Next</a>
</td>
</tr>
<tr>
<td width="40%" align="left" valign="top">Chapter 5. Zend_Config </td>
<td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td>
<td width="40%" align="right" valign="top"> 5.3. Zend_Config_Ini</td>
</tr>
</table></div>
<div class="revinfo"></div>
</body>
</html>
